/*
 * @Date: 2024-12-03 14:26:15
 * @Author: LiSong
 * @LastEditors: LiSong
 * @LastEditTime: 2024-12-04 17:13:42
 * @Description: 编辑器的数据类型
 */
import PojoUtils from '../utils/PojoUtils'

/**
 * 编辑弹窗的数据类型定义
 */
export class CodeStudioDataType {
  constructor (value, label, order, mode, visible=true) {
    this.value = value
    this.label = label
    this.order = order
    this.mode = mode
    this.visible = visible
  }

  static get JSON () {
    return new CodeStudioDataType('json', 'JSON', 2, 'json')
  }
  static get FUNC () {
    return new CodeStudioDataType('func', '方法', 3, 'javascript')
  }
  static get SQL () {
    return new CodeStudioDataType('sql', 'SQL', 1, 'sql', false)
  }
  static get TEXT () {
    return new CodeStudioDataType('text', '文本', 1, 'text', false)
  }

  static getTypes () {
    const types = PojoUtils.getOwnPropertyStatics(this, true)
    return types.sort((a, b) => a.order - b.order).filter(item => item.visible)
  }

  static getMode (value) {
    return this[value.toUpperCase()] ? this[value.toUpperCase()].mode : ''
  }

  /**
   * 比对是否相同
   * 
   * @param {Object|String} item 需要比对的数据
   * @returns {Boolean} true-相同 false-不相同
   */
  equals (item) {
    if (item instanceof CodeStudioDataType) {
      return item.value === this.value
    } else {
      return item === this.value
    }
  }
}